# -*- coding: UTF-8 -*- #
"""
-------真正的勇士， 敢于直面惨淡的Warning、 敢于正视淋漓的Error-----
@author : 贾鹏博
@file : 19、多协议封装应用场景.py
@time : 2022/6/26 17:57
"""

# ================================================ 多协议应用场景 ======================================================
"""
响应值不统一，导致断言比较困难
    json
    xml
解决方案：获得的响应信息全部转化为结构化的数据进行处理
"""

import json
import xmltodict
import requests


# =================================== pip install xmltodict==0.13.0 ====================================================
def test_xml_res():
    """
    xml 转化成 json 格式
    :return:
    """
    res = requests.get("https://www.nasa.gov/rss/dyn/lg_image_of_the_day.rss")
    print(res.text)
    # 转化成 python 标准的 dict 格式
    dict_res = xmltodict.parse(res.text)
    # 结果是：{'rss': {'@version': '2.0', '@xml:base': 'http://www.nasa.gov/', '@xmlns:atom': 'http://www.w3.org/2005/Atom', '@xmlns:dc': 'http://purl.org/dc/elements/1.1/', '@xmlns:itunes': 'http://www.itunes.com/dtds/podcast-1.0.dtd', '@xmlns:media': 'http://search.yahoo.com/mrss/', 'channel': {'title': 'NASA Image of the Day'
    print(dict_res)


# ============================  对 requests 的响应值做二次封装，可以使用统一提取方式完成断言：xml 转 dict =======================
from requests import Response


def response_to_dict(response: Response):
    """
    获取 Response 对象，将多种响应格式统一转化成为 dict
    :param response:
    :return:
    """
    res_text = response.text
    # 判断响应文本信息是否以 <?xml 开头
    if res_text.startswith("<?xml"):
        final_res = xmltodict.parse(res_text)
    else:
        final_res = response.json()
    return final_res


def test_response_to_dict():
    res = requests.get("https://www.nasa.gov/rss/dyn/lg_image_of_the_day.rss")
    res = requests.get("http://httpbin.ceshiren.com/get")
    final_res = response_to_dict(res)
    # 判断 转化后 是否为 dict 格式
    assert isinstance(final_res, dict), "xml转化成字典失败"
